package com.jch.ncud.view;

import javafx.fxml.FXMLLoader;
import javafx.scene.Cursor;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

import java.io.IOException;

// 登录界面装载 | 事件触发
public class LoginView extends Stage {

    private static final String RESOURCE_NAME = "/fxml/login/login.fxml";

    // 页面父节点
    private Parent root;

    public LoginView() {
        try {
            // 加载页面UI到节点中
            root = FXMLLoader.load(getClass().getResource(RESOURCE_NAME));
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 创建场景
        Scene scene = new Scene(root);
        // 设置场景背景板
        scene.setFill(Color.TRANSPARENT);

        // 设置应用场景
        setScene(scene);
        // 设置应用场景样式
        initStyle(StageStyle.TRANSPARENT);
        // 设置用户是否可以自定义场景大小 窗口大小
        setResizable(false);
        // 设置应用icon
        this.getIcons().add(new Image(getClass().getResource("/fxml/login/img/system/logo.png").toString()));

        initEvent();
    }

    // 初始化登录窗口内的事件
    private void initEvent() {
        this.move();
        this.min();
        this.quit();
        this.login();
    }

    // 获取页面上具有css id选择器的组件
    public <T> T $(String id, Class<T> clazz) {
        return (T) root.lookup("#" + id);
    }

    public void doLoginError() {
        System.out.println("登录失败！");
    }

    public void doLoginSuccess() {
        System.out.println("登录成功！");
    }

    // 桌面x轴
    private double xOffset;
    // 桌面y轴
    private double yOffset;

    // 鼠标拖动窗口事件
    private void move() {
        // 按下鼠标事件
        root.setOnMousePressed(event -> {
            xOffset = getX() - event.getSceneX();
            yOffset = getY() - event.getSceneY();
            root.setCursor(Cursor.CLOSED_HAND);
        });
        // 拖动鼠标事件
        root.setOnMouseDragged(event -> {
            setX(event.getSceneX() + xOffset);
            setY(event.getSceneY() + yOffset);
        });
        // 释放鼠标事件
        root.setOnMouseReleased(event -> root.setCursor(Cursor.DEFAULT));
    }

    // 最小化窗口事件
    private void min() {
        Button loginMin = $("login_min", Button.class); // 获取最小化窗口按钮
        loginMin.setOnAction(event -> {
            System.out.println("最小化窗口！");
            setIconified(true); // 将程序图标化 最小化窗口
        });
    }

    // 退出事件
    private void quit() {
        Button loginClose = $("login_close", Button.class); // 获取退出、关闭窗口按钮
        loginClose.setOnAction(event -> {
            System.out.println("退出、关闭窗口！");
            close(); // 关闭JavaFX场景
            System.exit(0); // 退出程序
        });
    }

    // 登录事件
    private void login() {
        TextField userId = $("userId", TextField.class);// 获取userId输入框
        PasswordField userPassword = $("userPassword", PasswordField.class); // 获取userPassword输入框
        // 获取登录按钮的点击事件
        $("login_button", Button.class).setOnAction(event -> {
            System.out.println("用户登录！");
            System.out.println("用户ID：" + userId.getText());
            System.out.println("用户密码：" + userPassword.getText());
        });
    }
}
